Data in various computing systems (e.g., desktops, mobile devices, web services) may be kept synchronized. In a synchronization environment, there may exist a synchronization server that provides data synchronization (also referred to as “sync”) services to a device, e.g., a mobile device. The device communicates with the synchronization server using a synchronization protocol where sync anchors are exchanged in order to ensure consistency. Examples of synchronization protocols or standards include Synchronization Markup Language (SyncML) and ActiveSync. In SyncML, a central SyncML server, for example, may hold a central copy of data, against which client devices may synchronize their data.
Those anchors are incremented each time a synchronization session occurs between a device and the server. In addition there is a backup synchronization server that is asynchronously replicating with the primary sync server. This replicating replicates data including, but not limited to, the anchors that are being used between the server and the device, and also a timestamp of when the last time the sync server polled the backup server. This replication is performed asynchronously and on a replication schedule. Hence, it is possible that in the event of a fail-over in which the backup server is requested to become the primary server, the backup server might not have the most recent anchor exchanged between the device and the primary server. Once the backup server takes over as the primary server in such an event, some of the recent anchors may be lost.
With current implementations, if the anchors between the device and the server mismatch, a ‘slow’ or ‘refresh’ synchronization would be performed, where the server and client would start from scratch to ensure that there exists consistency between the server and the client.
Another known implementation suggests a device and a server to keep state of exchange of all items and generate a change log delta from any two points, and utilize that log in the scenario of an anchor mismatch. However, this method is only applicable when the devices can be programmed in advance with this knowledge.